package com.fsm.common.orm.config;

import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.logicdelete.LogicDeleteProcessor;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.table.TableInfo;
import com.mybatisflex.core.util.StringUtil;

public class LogicDeleteProcessorConfig implements LogicDeleteProcessor {
    /**
     * 用户构建查询正常数据的条件
     * @param logicColumn
     * @param dialect
     */
    @Override
    public String buildLogicNormalCondition(String logicColumn, TableInfo tableInfo, IDialect dialect) {
        //如果查询条件附加 = 0 的结构。
        return logicColumn + " = 1";
    }
    /**
     * 用户与构建删除数据时的内容
     * @param logicColumn
     * @param dialect
     */
    @Override
    public String buildLogicDeletedSet(String logicColumn, TableInfo tableInfo, IDialect dialect) {
        //如果删除条件附加 set = 0 的结构。
        return logicColumn + " = 0";
    }
    /**
     * 用于构建通过 QueryWrapper 查询数据时的内容
     * @param queryWrapper
     * @param tableInfo
     */
    @Override
    public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo, String joinTableAlias) {
        String toSql = queryWrapper.toSQL();
        //如果查询条件中有 0 = 0 标记，则说明该数据不需要进行逻辑删除的查询。
        if(toSql.indexOf(" 0 = 0 ") < 0 ){
            if(StringUtil.isNotBlank(tableInfo.getLogicDeleteColumn())){
                queryWrapper.where(tableInfo.getLogicDeleteColumn() + " = 1 ");
            }
        }
    }

    @Override
    public Object getLogicNormalValue() {
        return 1;
    }

    @Override
    public Object getLogicDeletedValue() {
        return 0;
    }
}
